{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "5d904dee",
   "metadata": {},
   "source": [
    "# Example 12: Unsupervised learning"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6465ec94",
   "metadata": {},
   "source": [
    "In this example, we will use KAN for unsupervised learning. Instead of trying to figure out how a target variable $y$ depends on input variables, we treat all variables on the equal footing (as input variables). Below we contruct a synthetic dataset where we have six variables $x_1, x_2, x_3, x_4, x_5, x_6$. $(x_1, x_2, x_3)$ are dependent such that $x_3={\\rm exp}({\\rm sin}(\\pi x_1)+x_2^2)$; $(x_4,x_5)$ are dependent such that $x_5=x_4^3$. And $x_6$ is independent of all other variables. Can we use KANs to discover these dependent groups?\n",
    "\n",
    "The idea is that we treat the problem as a classification problem. The dataset that satisfies these interdependent relations are 'positive' samples, while corrupted samples (by random permutation of features across samples) are 'negative' samples. We want to train a KAN to output 1 when it is a positive sample, and output 0 when it is a negative sample. We set the last layer activation to be Gaussian, so positive samples will have zero activation in the second to last layer, while negtive samples will have non-zero activation in the second to last layer. We can then define the relation implicitly as $g=0$ where $g$ is the activation in the second to last layer."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94056ef6",
   "metadata": {},
   "source": [
    "Intialize model and create dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "0a59179d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cuda\n",
      "checkpoint directory created: ./model\n",
      "saving model version 0.0\n"
     ]
    }
   ],
   "source": [
    "from kan import KAN\n",
    "import torch\n",
    "import copy\n",
    "\n",
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "print(device)\n",
    "\n",
    "seed = 1\n",
    "\n",
    "model = KAN(width=[6,1,1], grid=3, k=3, seed=seed, device=device)\n",
    "\n",
    "# create dataset\n",
    "\n",
    "\n",
    "def create_dataset(train_num=500, test_num=500):\n",
    "    \n",
    "    def generate_contrastive(x):\n",
    "        # positive samples\n",
    "        batch = x.shape[0]\n",
    "        x[:,2] = torch.exp(torch.sin(torch.pi*x[:,0])+x[:,1]**2)\n",
    "        x[:,3] = x[:,4]**3\n",
    "\n",
    "        # negative samples\n",
    "        def corrupt(tensor):\n",
    "            y = copy.deepcopy(tensor)\n",
    "            for i in range(y.shape[1]):\n",
    "                y[:,i] = y[:,i][torch.randperm(y.shape[0])]\n",
    "            return y\n",
    "\n",
    "        x_cor = corrupt(x)\n",
    "        x = torch.cat([x, x_cor], dim=0)\n",
    "        y = torch.cat([torch.ones(batch,), torch.zeros(batch,)], dim=0)[:,None]\n",
    "        return x, y\n",
    "        \n",
    "    x = torch.rand(train_num, 6) * 2 - 1\n",
    "    x_train, y_train = generate_contrastive(x)\n",
    "    \n",
    "    x = torch.rand(test_num, 6) * 2 - 1\n",
    "    x_test, y_test = generate_contrastive(x)\n",
    "    \n",
    "    dataset = {}\n",
    "    dataset['train_input'] = x_train.to(device)\n",
    "    dataset['test_input'] = x_test.to(device)\n",
    "    dataset['train_label'] = y_train.to(device)\n",
    "    dataset['test_label'] = y_test.to(device)\n",
    "    return dataset\n",
    "\n",
    "dataset = create_dataset()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "79665292",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x400 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model(dataset['train_input'])\n",
    "model.plot(beta=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "45760ca2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saving model version 0.1\n"
     ]
    }
   ],
   "source": [
    "# set the (1,0,0) activation to be gausssian\n",
    "#model.fix_symbolic(1,0,0,lambda x: torch.exp(-x**2/10),fit_params_bool=False)\n",
    "model.fix_symbolic(1,0,0,'gaussian',fit_params_bool=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "d951ae17",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZcAAAFICAYAAACcDrP3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEOElEQVR4nO3deVzUZeIH8M93ZhjkRlBBEJDLG8pzvfPME7XWdGt1M01sU8p1zdZaj1fbsW3RoaGppZ1rph0ueVGZmqtmeYF4cIjcKDdyz/H8/pjfzIqgAn6HmYHP+/XyVeo483wfvjOfeW5JCCFAREQkI4WlC0BERK0Pw4WIiGTHcCEiItkxXIiISHYMFyIikh3DhYiIZMdwISIi2TFciIhIdgwXIiKSHcOFiIhkx3AhIiLZMVyIiEh2DBciIpIdw4WIiGTHcCEiItkxXIiISHYMFyIikh3DheguTp8+jQULFsDT0xNqtRqenp5YsGABTp8+bemiEVkticccEzVMq9Vi8eLF2Lx5M1QqFbRarenvjL+PjIxETEwMVCqVBUtKZH0YLkS3sWjRImzZsgV3eotIkoSFCxdi06ZNLVgyIuvHcCFqwOnTp9G/f/9GP/7UqVPo16+fGUtEZFs45kLUgKZ0dalUKmzYsMHMJSKyLWy5EDXA09MTRUVFjX68h4cHCgsLzVgiItvCcCFqgFqthkajafTj7ezsUFtba8YSEdkWdosRNcDFxcWsjydq7RguRA2YMWNGk8ZcHnroITOXiMi2sFuMqAGcLUZ0b9hyIWpAv379EBkZCUmS7vg4SZIQGRnJYCG6BcOF6DZiYmKwcOFCAKjXRWb8/cKFCxETE9PiZSOyduwWI7qL06dPY8OGDdi5cyfKysrg6uqKRx55BE8//TRbLES3wXAhaiTjOAzHV4jujt1iREQkO4YLERHJjuFCRESyY7gQEZHsGC5ERCQ7hgsREcmO4UJERLJjuBARkewYLkREJDuGCxERyY7hQkREsmO4EBGR7BguREQkO4YLERHJjuFCRESyY7gQEZHsGC5ERCQ7hgsREcmO4UJERLJTWboARNauqKgIZ86cQVxcHABg7969sLe3R7du3WBnZ2fh0hFZJ0kIISxdCCJrVFlZiW3btiEmJgYlJSXw9/eHg4MDioqKUFhYiEGDBmHVqlXo27evpYtKZHUYLkQNKCkpwZIlS3Dw4EFERUVh9uzZ0Gq10Ol0poCJiYnBwYMH8fbbb2P69OmQJMnSxSayGgwXoltotVosXboUe/bswaeffoqhQ4eiuroao0aNwqVLl/Dkk08iOjoaGo0GmzdvxptvvomdO3di4MCBli46kdXggD7RLY4ePYrt27cjOjoaw4YNg0KhgBACFRUVuHHjBqqrqwEAarUaixYtwowZM7BmzRrU1NRYuORE1oPhQnQTIQQ++ugj9O/fH1OmTLlrV5ednR2ioqJw4cIFxMfHt1ApiawfZ4sR3aSiogInT57EggULEBcXh8zMTABAbW0tioqKAACJiYnYuHEjAECSJEycOBE9e/bEiRMn2DVG9P8YLkQ3KS8vR3FxMQICAhATE4MDBw7Ue8yRI0dw5MgRAIBSqcTevXsREBCArKysli4ukdViuBDdRKlUQqVSoaamBi4uLmjfvr3p70pLS6HX62Fvbw9HR8d6j1er1ZYqNpHVYbgQ3cTV1RW+vr44d+4cYmJiTIP3VVVViIiIQHJyMmbNmoWXX37Z9G+cnZ2xcuVKjB8/3lLFJrI6HNAnuom9vT0mTZqE2NhYAIC/vz/8/f3RpUsX02p8Z2dn+Pn5wd/fH35+fjh37hyuX7+OoUOHWrLoRFaF4UJ0i8cffxzV1dWIjo5GbW3tbR8nhEBBQQHWrl2LWbNmISAgoAVLSWTd2C1GdIuuXbvin//8J5YsWQJ7e3v89a9/hVqtRteuXaHVauHl5QUASEtLw9KlS6FUKvHcc89xhT7RTbhCn6gBer0e27dvxwsvvAAfHx/MmTMHvXr1gqOjI4qLi3Hs2DFs374dvXv3xvr16+Hn52fpIhNZFYYL0R0kJydj8+bN2L9/Pwry8oCKCqjd3dEzPByPP/44pk+fbpo5RkT/w3AhaoTy8nIUHj4MzdSpcImLg+fo0VCp2KtMdDt8dxA1grOzM5w7dzb8xtMTYLAQ3RFnixERkewYLkREJDuGCxERyY7hQkREsmO4EBGR7BguREQkO4YLERHJjuFCRESyY7gQEZHsGC5ERCQ7hgsREcmO4UJERLJjuBARkewYLkREJDuGCxERyY7hQkREsmO4EBGR7BguREQkO4YLERHJjuFCRESyk4QQwtKFILIJQhh+SZLhFxHdlsrSBSAyB7N8ZzI+p8zPLTGoqBViuFCrI4TAxe3bUZaaatUf3EIIuAYHo+ejj1p1OYmag+FCrVLx+fPotnAhHJydLVMAvR44dw64fBno3dvwS1F3iLOqvBxJW7ZYpnxEZsZwodZJoYCTpyccXV1b/rU1GuDVV4G33gLKywFXV+DFF4GlSwHV/95yCnv7eoFD1FrwziaSkxDARx8Br7wCODkBixYBdnbAqlXAzp2yj9cQWSuGC5Gc0tOB1auBdu2ATz8F3nsP+OADw+yylSuBvDxLl5CoRTBciOQihKEr7No1Q4tl9GhDt9eUKcDcuUBGBhATw9YLtQkMFyK5ZGQAn38OdOpkGF8xjqcolcCKFYC7O/Dhh8D165YsJVGLYLgQyUEI4JNPgOJi4E9/Anx86v59UBDwyCOGVs2OHWy9UKvHcCGSQ0WFYYzF0RGYP7/+Cn5JMnSV2dsDW7cCNTWWKSdRC2G4EN0rIYCjR4ErV4ARI4DQ0IYfFxYG9O8PXLgAnDrVsmUkamEMFyI5fPKJIWSeeOL2a1dUKuDxxwGt1jA2Q9SKMVyI7lV+PvDDD4aB/LFjb7+ppSQBkycbBvb37AHKylq0mEQtieFCdC+EAA4eBAoKgAkTAA+POz++c2dg5EggO9vQlUbUSnH7F6J7IYRh9pdCAcyeffet+CXJMJssP5/b9lOrxnAhuhf5+cDPPxtaJEOH3v3xkgRERACTJhn2IEtIMH8ZiSyA3WJEzSUE8NNPQFERMG6cYYPKxrCzAxwczFs2IgtjuBA1lxCGzSglybBAkt1cRCYMF6LmKiw0dIl5ewNDhli6NERWheFC1BxCAEeOGAJmzBjD9GIiMmG4EDXXzp2G/z7yiGXLQWSFGC5EzVFYaBjM79QJGDaM4y1Et2C4EDWVsUusoMBwZsvdFk4StUEMF6KmEgL44gvD///hD5YtC5GVYrgQNVV+vqFLzNvbsAsyu8SI6mG4EDWFEEBcnGHMZcIEzhIjug2GC1FT6PWGQ8GUSuCPf2Srheg2GC5ETZGaChw7Zji2ePBgS5eGyGoxXIgaSwjg3/8GKiuBRx81HGlMRA1iuBA11o0bwGefAU5OwGOPsUuM6A4YLkSNIYTh9Mi0NMMOyMHBli4RkVVjuBA1Rk0NsG6dYSB/yRLD4WBEdFt8hxDdjRDAgQPAb78Bv/sdMHw4u8SI7oLhQnQ3FRXAyy8bAuX55wG12tIlIrJ6DBeiOxEC2LYNOH0aGDUKGD+erRaiRmC4EN2OEEBioqHV4uwMvPIKWy1EjcRwIWqIEIZdjyMjDf9dtgzo35+tFqJGYrgQ3UoI4No1YN484MQJYPJkYPlyzhAjagK+W4iMhAA0GsNZLdOmAfv2GWaGbd7M1fhETaSydAGIzEqIO/+dTgdUVQHXrxumGu/aZZh2XF0NPPww8N57gJcXu8OImojhQq3X2bPAf/5jCBEhDDsaa7WG1klVFVBeDhQVGbrArl0DysoMIdKtG/Dss8CcOYCDA4OFqBkYLtR6Xb4MvP123T8zBoVCYfilVhtmggUFAfffbzijZcwYw9HFDBWiZmO4UOuk1+NGcDC0b79tCAlJMoSJUgnY2QHt2hnGUVxdgfbtATc3w59JElBbC+Tlmb2IVeXlhtYUUSvEcKFWybNvX6SfPGndrQ8h4Nm3r6VLQWQWkhB3GvEksk22dFtL1hyARM3Elgu1Smb5wL45sBgIRHfEdS5EjXXmjGHc5swZS5eEyOoxXIiISHYMFyIikh3DhYiIZMdwISIi2TFciIhIdgwXIiKSHcOFiIhkx3AhIiLZMVyIiEh2DBciIpIdw4WIiGTHcCEiItkxXIiISHYMFyIikh3DhYiIZMdwISIi2TFciIhIdgwXIiKSHcOFiIhkx3AhIiLZMVyIiEh2DBciIpIdw4XoLk6fPo0FCxZg9OjRAIDRo0djwYIFOH36tIVLRmS9JCGEsHQhiKyRVqvF4sWLsXnzZqhUKoRptTgNoB+ABJUKWq0WkZGRiImJgUqlsnRxiawK3xFEt7F48WJs2bIFgCFobmb8vfHvN23a1LKFI7JybLkQNeD06dPo379/nT/rC5haLmduefypU6fQr1+/FiodkfXjmAtRA5rS1aVSqbBhwwYzl4jItrDlQtQAT09PFBUV1fmzO7VcPDw8UFhY2EKlI7J+bLkQNeDGjRtmfTxRa8dwIWqAi4tLvT+7BEOr5VIjH0/UljFciBowY8aMemMuVTB0h1Xd8liVSoWHHnqopYpGZBM45kLUgIZmi90JZ4sR1cWWC1ED+vXrh8jISEiSdMfHSZKEyMhIBgvRLRguRLcRExODhQsXAkC9LjLj7xcuXIiYmJgWLxuRtWO3GNFdnD59Ghs2bMDOnTtRVlYGV1dXPPLII3j66afZYiG6DYYLUSMZx2E4vkJ0d+wWIyIi2TFciIhIdgwXIiKSHcOFiIhkx3AhIiLZMVyIiEh2DBciIpIdw4WIiGTHcCEiItkxXIiISHYMFyIikh3DhYiIZMdwISIi2TFciIhIdgwXIiKSHcOFiIhkx3AhIiLZMVyIiEh2DBciIpKdytIFILJ2RUVFOHPmDOLi4gAAe/fuhb29Pbp16wY7OzsLl47IOklCCGHpQhBZo8rKSmzbtg0xMTEoKSmBv78/HBwcUFRUhMLCQgwaNAirVq1C3759LV1UIqvDcCFqQElJCZYsWYKDBw8iKioKs2fPhlarhU6nMwVMTEwMDh48iLfffhvTp0+HJEmWLjaR1WC4EN1Cq9Vi6dKl2LNnDz799FMMHToU1dXVGDVqFC5duoQnn3wS0dHR0Gg02Lx5M958803s3LkTAwcOtHTRiawGB/SJbnH06FFs374d0dHRGDZsGBQKBYQQqKiowI0bN1BdXQ0AUKvVWLRoEWbMmIE1a9agpqbGwiUnsh4MF6KbCCHw0UcfoX///pgyZcpdu7rs7OwQFRWFCxcuID4+voVKSWT9OFuM6CYVFRU4efIkFixYgLi4OGRmZgIAamtrUVRUBABITEzExo0bAQCSJGHixIno2bMnTpw4wa4xov/HcCG6SXl5OYqLixEQEICYmBgcOHCg3mOOHDmCI0eOAACUSiX27t2LgIAAZGVltXRxiawWw4UIQHV1NTIyMnDu3DnU1NSgpqYGLi4uaN++vekxpaWl0Ov1sLe3h6OjIwBDuKhUKlRXV6O4uBhXr15FQEAAZ45Rm8fZYtSmCCFw7do1pKen1/mVm5uLqqoq3LhxA/Hx8Vi0aBGWL19uGryvqqpCREQEkpOTMXfuXLz88sum53R2dsaDDz6I06dPQ6lUwsXFBWFhYQgLC0N4eDjCwsLQp08fuLi4WOqyiVocWy7UalVVVZnC4+rVq0hPT0dGRoYpMBwdHeHi4gKlUolOnTrByckJPj4+8Pf3R2xsLJYvXw5/f38AhrEY42p8Z2dn+Pn5QZIkCCFw6NAhJCUlQQgBrVYLJycnlJaWIi4uDh988AF0Oh0AIDAw0BQ2YWFhuO+++xAYGAiFgvNqqPVhuJDN0+v1yMvLq9cauX79OgBD15Wvry+6du2K3r17QwiByspKFBQUQAgBLy8vhIaGIjQ0FJ07d0Z6ejqGDh2KN954A6+88grUanWDryuEQEFBAdauXYs///nPeO6557B//37ExsZi//79KCsrQ5cuXTBkyBD4+/tDp9Ph4sWL2LRpE/Lz8wEYAq5Pnz6msDG2ctzd3Vuq+ojMgt1iZFMqKirqtESMrZHa2loAgLu7OwICAhAQEICuXbvC398fQgikpaUhOTkZBQUFUCqV6Nq1qylQXF1d67zG7t278cgjj8DOzg7Lli3D8uXLoVarMXPmTKSkpOCxxx7D6tWrkZaWhmeeeQbnzp3Df//7X1MrBzDMLvv5558RGxuL2NhYXLlyBU5OThg/fjwiIiIwaNAg5OXlIT4+HgkJCYiPj8fFixeh0WgAAP7+/nVaOeHh4QgJCYFSqWy5yia6BwwXsko6nQ65ubn1WiMFBQUAAJVKBT8/P1OQGH+5ubmhpqYGV65cQXJyMlJSUlBVVQUnJyeEhIQgNDQUgYGBt22NbNmyBU899RQeeughTJkyBWvXroWPjw/mzJmDXr16wdHREcXFxTh27Bi2b98OHx8fVFdXo3v37njnnXfg4eFR7zmFELh48SL+85//IDY2FsePHwcADBo0CBEREYiIiEBYWBi0Wi0uX75sChxj6OTm5gIA2rVrh969e5vCJjw8HH369IGnp6eZfgpEzcdwIYu7ceNGnZZIeno6MjMzTd/iPTw8TC0RY4j4+PjU+RZfWlqKpKQkJCcnIz09HXq9Hp06dTK1Tnx8fO44g0sIgZdffhmrV6/G4sWL8e6770KpVCI5ORmbN2/G/v37TcGmVqvRs2dPPP7445g+fToyMzPxzDPPwMnJCevXr4evr+8drzc/Px979+5FbGwsDhw4gPLycgQEBJiC5oEHHoC9vX2dx58/fx4JCQk4d+4cEhIScOHCBdOOAL6+vnUmD4SHhyM0NJQ7NpNFMVyoxeh0OmRnZ9cJkatXr6K4uBiAYbW7v79/vW6thmZZCSGQk5NjCpT8/HwoFIo63V1ubm6NLldUVBQ2btyIf/zjH3jxxRfrBVF5eTkKCwuh0Wjg4uICT09PqFT/G7LMzs5GVFQUKioqsH79enTr1q1Rr11TU4PDhw+bus/S09Ph7OyMCRMmICIiApMnT0bHjh3r/TutVouUlBRT2Bh/GRd9qtVq9OrVq17XWkPPRWQODBcyi5KSknpdWpmZmaaZUx06dKjTEgkICEDnzp3vOHOqtra2TndXZWUlHB0dTd1dQUFBt+3uup3q6mrMmTMH33zzDTZt2oQnn3yy2ddcVFSEpUuXIj09HdHR0RgwYECT/r0QAufPnzcFzS+//AIAGDJkiKlV06tXrzu2wIqKikytnPj4eMTHxyMxMRFVVVUAAG9v7zphEx4eju7duze53ojuhuFC90Sj0dRpjRi7t0pLSwEA9vb2ptaIMUz8/f3h5OTUqOcvKytDcnIykpOTcfXqVeh0OnTo0AGhoaHo1q0bfH19m71gsbS0FNOnT8cvv/yCHTt2YNq0ac16nptVVlZixYoVOH36NF566SWMGzeu2c917do17NmzB7GxsYiLi0NlZSUCAwNNQTNy5MhGhYJOp8OVK1dMYWMMnvT0dACG8asePXqYZqsZf3l7e3MxKDUbw4UaRQiB4uLieq2R7OxsU2vEy8urTkuka9eu8PLyatIHlBACubm5pkC5du0aFAoF/P39TYEixzTdnJwcTJo0CZmZmYiNjcWwYcPu+TmNNBoNXnrpJRw4cADLly/HrFmz7vk5q6ur8dNPP5laNVlZWXB1dcXEiRMRERGBSZMmNXlgv7S0tE4rx9i1VlFRAQDo2LFjvcWgPXv2RLt27e75eqj1Y7hQPbW1tcjKyqo3yH7jxg0AgIODQ71ZWsZTGptDo9GYpgqnpKSgvLwcDg4OCA4ORrdu3RAUFFRngPteXb58GRMmTIBOp8P+/fvRu3dv2Z7bSK/XY926dfj8888xf/58PPXUU7K1AoQQOHfunClofv31VygUCgwbNszUqunevXuzXk+v1+Pq1at1wubcuXO4cuUKAMOaoW7dutWZPBAWFnZPLUhqnRgubZgQAoWFhfW6tHJyciCEgCRJ8Pb2rjdTq2PHjvf8QVJWVoaUlBRTd5dWq4Wnp2ed7i5zrFw/efIkJk+ejE6dOuHAgQPw8/OT/TVu9tlnn+Hdd9/FtGnT8MILL5hlnUpubq6p++z7779HVVUVQkJCTEEzfPjwe545Vl5ejsTExDoz1hISElBWVgYAaN++fZ1xnLCwMNPUbWqbGC5tRE1NDTIyMup1axm7QJycnOp1afn5+cnWYhBCIC8vz9TdlZeXB0mSTN1doaGhDa4RkdO+ffswc+ZM3Hffffjuu+/M/npGe/fuxUsvvYShQ4fi1VdfNWu3UlVVFX788UfExsbiu+++Q05ODtzd3et0n928Gee9EEIgIyOj3rqc5ORkCCGgUCgQEhJSb8aav78/WzltAMOllRFCID8/v94q9ry8PFNrxMfHp95MLU9PT9nf8Fqttk53140bN9CuXTsEBwcjNDQUwcHBLdZ//8knn2DBggWYOHEiduzY0eLfqI8fP44VK1YgNDQU77zzTr1dAcxBCIHTp0+bus+MG2sOHz4c06ZNQ0REBEJDQ2V/3crKSly4cKHOjLWEhATTlHNXV9c6+6uFhYWhd+/ecHZ2lr0sZDkMFxtWVVVVpzVy9epVZGRkmKadOjs7m0LE+N8uXbqYddppeXm5qXWSlpYGrVYLDw8PU+vEz8+vRTdqFELgzTffxIoVKzB//nxs2rSpzvqUlpSYmIilS5eiffv2WL9+Pby8vFr09bOzs/Hdd98hNjYWP/74o2lnAWP32dChQ81WN0IIZGdn15k8EB8fj6SkJNOEkKCgoDoz1sLDw9G1a1du7GmjGC42wLhN/K0D7NeuXQPwv40Zbx1kb9++fYt0P9zc3ZWbmwtJktClSxd069YNoaGhFtueRK/XY/ny5Xj77bfx4osv4h//+IfFu2MyMjKwZMkSaLVavPfeewgKCrJIOSoqKup0n+Xl5cHDwwOTJk1CREQEJk6c2OhFqPeiuroaFy9erBc6xt0QnJ2dTRt73rzlTUu0/OjeMFysTEVFhak1cvM28catPtzc3Op1afn6+rboVh9arRbp6elISkpCSkoKysrKYG9vj6CgIHTr1g3BwcHNnjkml9raWjzxxBPYvn071q1bhyVLlli0PDfLz8/Hs88+i7y8PLz99tu47777LFoevV6P3377zdR9du7cOahUKowcOdLUqgkODm6x8hjH524ex4mPj8elS5eg1WoBAAEBAXUmD4SHhyMoKIgbe1oRhouF6PX6ehszXr161fSNTalUNrgxo6W2Yq+oqDDN7rpy5Qo0Gg3c3d1NrRM/Pz+reWPfuHEDM2fOxKFDh/DZZ5/hkUcesXSR6ikvL8df//pXnD9/Hq+99hpGjhxp6SKZZGRkmLrPDh48iNraWvTs2dM0TjN48GCL/Kxra2tNG3vePIkgLy8PgOH4gps39jR2r8k1gYGahuHSAm7cuFFvllZGRka9jRlvbY1Y+sP6+vXrpu6u7OxsSJIEX19fU6B06NDBouVryPXr1zF58mQkJSVh9+7dGD16tKWLdFu1tbVYtWoVDh06hJUrV2LGjBmWLlI95eXl+P777xEbG4s9e/bg+vXr6NChAyZPnoyIiAg8+OCDFu+iun79ep391eLj43HhwgXTMQx+fn71trwJCQmx2NhbW8FwkZFOp0NOTk69mVpFRUUADBszNtQasfSb00in0yE9Pd0UKKWlpVCr1QgKCkJoaChCQkKset3ClStXMGHCBJSXl2Pfvn24//77LV2ku9Lr9XjjjTewa9cuPPXUU5g/f77Fx4VuR6/X4+TJk6bus4SEBNjZ2WHUqFGm7rOuXbtaupgADAtzk5OT64zjJCQkIDs7G4BhW6JevXrVmbEWFhZmlV+YbBXDpZlKS0vrdWllZWWZ+oQ7dOhQL0Q6d+5s8dbIrSorK+t0d9XW1sLNzc00uysgIMDqytyQM2fOYNKkSXBxcUFcXBwCAwMtXaRGE0Lgww8/xKZNmzBz5kw899xzNjFD6urVq6agOXToEDQaDfr06WMKmkGDBlndvVNYWIjz58/X6VpLTEw0HX3duXPneutyunfvzuMLmoHhchdarRbZ2dn1ZmqVlJQAMGxtfus28QEBAY3emNES8vPzTa2TrKwsAIYzQYyB0qlTJwuXsGkOHjyIGTNmoHv37tizZ4/Nld/o22+/xWuvvYbRo0fjpZdesqmdisvKyhAXF2fqPissLETHjh0xdepUREREYPz48Va7jkWn0yElJaXeYtCMjAwAhh6Hnj171tvypqWnktsahsv/E0LU2SbeGCY3b8zYqVOneq0Rb29vq/+WqdPpkJGRYQqUkpIS2NnZ1enusuYwvJMvv/wSc+bMwejRo/HVV19Z7QdYYx0+fBgvvPAC+vTpg+joaJu8Hp1OhxMnTphaNRcuXIBarcaYMWNMrRpzb7sjh5KSknqHtJ0/fx6VlZUADJ8Htx7S1qNHD1n3wbNlbTJcNBoNMjMz63VrGTdmbNeuXYPbxFvzeMOtqqqq6nR31dTUwNXVtU53l60PaK5fvx7PPvssHnvsMWzdutWmvunfydmzZ7Fs2TJ4e3vj3XfftfkDvlJTU02zzw4fPgytVov77rvPFDQDBgyw+i9oRnq9HmlpaXX2V4uPj0daWhoAw/EF3bt3r9e11rlzZ6sdSzOXVh0uQggUFRXVG2DPycmBXq8HANPGjDd3a3Xq1Mkmb4TCwkLTyYxZWVkQQsDHx8cUKK2lGS+EwIsvvojXXnsNy5YtwxtvvGEzH06NlZqaiqioKKhUKrz33nvw9/e3dJFkUVpaiv379yM2NhZ79+5FcXExvL29MWXKFERERGDcuHE22YouKyszbex583hOeXk5AMDT07Peljc9e/a0+Howc2o14VJTU1OnNWIME+PGjMZt4m9egOjv72/TZ1Po9XpkZmYiOTkZSUlJKC4uhkqlqtPdZYvdKnei1WqxaNEibN26FW+88QaWL19u6SKZTV5eHp555hkUFxfjnXfeMcvRAJak1Wpx7NgxU/fZ5cuX0a5dO4wdOxYRERGYOnUqfH19LV3MZtPr9aaNPW+etZaammra2DM0NLTeIW1+fn42+eX2VjYXLkIIFBQU1Btgz83NNW3M2Llz53oD7B06dGgVP7Dq6mqkpqYiKSkJV65cQXV1NVxcXEytk65du9p8d9ftVFZWYvbs2di/fz+2bt2KuXPnWrpIZldaWoq//OUvSE5Oxr/+9S8MGTLE0kUym+TkZFPQ/Pzzz9DpdOjXr5+p+6xfv36t4j1cUVFRp5Vj/K/x9FZ3d/d663J69eplcy06mwiX5ORkHDp0yBQkxo0ZnZyc6m2FIuc28dbk119/xaVLl5CZmQkhBLy9vU2B0rlzZ0sXz+wKCwsRERGB+Ph47Nq1CxMnTrR0kVpMdXU1XnjhBRw7dgyrV6/G5MmTLV0ksysuLjZ1n+3btw8lJSXw8fHB1KlT8cwzz7S6VpwQApmZmfW2vElOToZer4ckSQgODkZ4eDjuv/9+/O1vf7P6oLWJcCkoKEBWVhYcHR3h6OgIJycnODo6Qq1WW30Fy+XcuXOQJAmenp7o0KFDqwzQOxFCmFqmbeVnfjMhhGmssEuXLm2qDowfUcb/tqV7wHjf3/wLgE2suzFLuNhAXpmY4yZt69cPmKcOjOEiN9YB3we2dA+Yi9x1IHvnvBACR48exbVr16z624UQAl5eXhg+fLis5RRC4MKFC6aDkaxZ+/bt0atXL9l/TkIIbN++HampqVZ/DwQHB+PRRx81Sx0cOHDAtCebtRJCwNfXFxMmTJD9fcB7QGDHjh02UwezZ8+WtZxmGfnNyMjAuHHjrHImVlZWFpKTk9G9e3ecPn3aLK9x/fp19O3bt0lN15KSEuTm5qJDhw4tsq5Bo9HgzJkz6NWrl1me//z585gyZQp++uknDB8+HD169LC6rUDKy8uxZcsWsz1/amoqZsyYYfb1URqNBvHx8SgvL0ffvn2btFddZWUlvv32W7OU6/z585g4cSKOHz+OwMBABAYGwtvb26o+F8x9D5w/fx6zZ8/Gp59+irlz58Lb29tsr9Vc5eXl+PDDDzF79mxZn9cs4aJQKODi4mJ1iw6FEDh79ix2796Nxx9/3GxrIyRJgoODQ6PGRYQQSE9PR2xsrOkY4EmTJqFHjx5m/bZTU1Nj1udXKBRISEjAmjVr4Orqisceewxr1qxBx44dreZbnL29vVnXx0iSBDc3N7NOB6+trcU777yD3bt3Q6fToWfPnnjllVcavWjPzs7ObD8PhUKBy5cvY+XKlVCpVHB1dUVwcDAeeOABTJkyBf3794eTk5NF7wdz3wMKhQL79u3DunXrsH//fkRHR2Ps2LFWtS7LXHVg8SsUQkCn06Gqqgo6nc6sfZRarRZnzpyBSqVCjx49zPY6TVFeXo49e/agoqIC3bt3h1arxffff4+ysjJLF+2ehYeHY8WKFfDw8MD777+Phx9+GFevXrWpfmhrJoTAnj178PXXX6NTp04YOHAgLly4gH/961+m7eYtrWfPnli1ahV+//vfw9fXF5cuXcKbb76JiRMnYuzYsdi8eTOKiopa9T0xdepUPPbYY0hNTcUf/vAHrF+/3mp+PuZk0XAxnjgXExODlStX4u2330ZOTo7ZbrSCggLk5ubCx8fHKjY3FELgl19+QWlpKcLDwzF9+nT069cP5eXlOHnypM2/4fr06YNXX30VBw8exNSpU3H8+HHMnj0b2dnZNn9t1qCkpATbtm2DWq3GmjVr8Oqrr6JXr144ceIEDh06ZBV1HB4ejrVr1+Lzzz/Hf//7Xxw7dgzvvvsuBg8ejPPnz2Px4sUYPXo0vvjiC1RXV1tFmeXWpUsXvP/++1i/fj3s7OywcuVKPP/88ygvL2+V12tksXARQiA/Px9vvPEGjh49irKyMpw8eRLR0dGmHYflfr2LFy+itrYWYWFhVtH/f+PGDSQkJMDBwQHDhg2DSqXCoEGD4ODggMTERNPuArZMkiT4+/vj448/xkMPPYTffvsN8+fPNy0Yo+YRQmDfvn3Iy8vD2LFjER4eDmdnZzz99NNQKBT45JNPTEdjW5okSVAoFHB2dkbv3r2xZMkS7Nu3D3v37sX06dORnJyMefPm4U9/+hPS0tJa5QeuWq3GE088gR07dsDf3x8bNmzAwoULUVhY2CqvF7BguGi1WmzduhVZWVkYOXIkXn31VQwbNgyZmZnYtWuXae8vOZ05cwaSJFnFIVJCCCQmJqKqqgp9+vQxDcK6uLigW7duqKysRHJycqu48YxjD5s2bcKoUaPw448/4vnnn28TXQPmUlNTg927d0OtVuPRRx+FQqGAJEno27cv7rvvPqSmpuLUqVNWef9IkoR27dph5MiR2L59O3bu3InevXvjq6++woQJE3DgwAGzvP8tTZIkjBw5El9//TX69u2Lr7/+Gn/4wx9abaBaJFyM3UFnzpxBYGAg5s2bBy8vL8ydOxceHh44cuQIcnNzZX3N6upqJCcnw9nZ2SoOktJqtUhISIBKpcJ9991nGtSUJAnh4eFQKBQ4f/58q7npJEmCh4cHtm7dipCQEGzbtg0bN25slR8iLSExMRHp6ekICwtDUFCQ6c+VSiVmzZoFIQS++eYbq75/JEmCWq3G5MmTceDAATz99NPIzMzEH/7wB2zZssV08F5rIkkSevbsiV27dmH8+PH4+eefMWPGDJw4ccKqf1bNYZFwqa6uxtdffw2FQoE//vGPphkj7du3x4MPPojq6mr88MMPslZ2Tk4OSkpK4O/vbxWbOV67dg1FRUXo3LlzvaNVvb294e7ujry8vFYxsG8kSRICAgLw4YcfwtnZGatXr8bBgwdb3ZvK3IQQ2L9/P/R6PaZMmVKni1eSJAwcOBDe3t44deoUrl+/bsGSNo4kSejYsSPeeustrFu3DpIkYenSpYiOjoZGo7F08WQnSRJ8fX3x2WefYd68eUhOTsbDDz+MTZs2oaqqqsH3g3F1fklJCU6cOIGtW7fi9ddfx/vvv4+TJ0+ipqbG6t5HLR4uQgj89ttvyMrKQlhYWJ1FfMZmo5OTE44dOybbmINxvEWn0yEsLMziU2GN5dHr9ejdu3e98qhUKoSEhECj0bS6JrMkSRg2bBj++c9/orq6GosWLcKVK1da1TWaW0VFBY4fPw5XV1cMHjy43v3j5OSEkSNHoqKiAj///LPN1K2dnR2efPJJfPLJJ3B1dcWaNWvw1ltvtdoWjJubG9599128/PLL0Gg0WLZsGWbPno3Dhw+jvLwcOp0OWq0WBQUF+PHHH7Fs2TKMHDkSDz74IJ566imsWrUKzzzzDMaPH4/Zs2cjMTHRqn7WLR4uWq0We/fuhUKhwLRp0+oNrBvPPSguLpatsoQQiI+PhyRJ6NOnj8XDRavVIiUlBXZ2dggODq5XHkmSEBoaCkmSkJycbKFSmo8kSXjiiScQGRmJq1evYuHChWaZxNFaXbx4EQUFBQgLC4OHh0e9v5ckCRMmTIBSqURcXJzpJFVboFAoMHXqVHz22Wdwc3PDmjVrsGnTplbZfWoce/rLX/6Cr7/+Gv369UNcXBymTZuGUaNGYdasWYiIiMDQoUMxffp0bNiwAdevX8ewYcOwcuVKrFu3Dn//+9/RvXt37N+/H9OmTcOxY8esJmBaPFxSUlKQlpaGoKAgdO/evcEP1gceeAAAZPvWVV1djatXr8LV1RVdunS55+e7V9evX0dpaSk6d+4MFxeXBh/j5eUFJycn5OTkmHaBbk3s7Ozw8ssvY8yYMTh8+DCWLVuG6upqSxfL6gkhcOjQIej1eowZM+a2X5RCQ0Ph7++Py5cvIy8vr4VLeW8kScK4cePw0UcfwdHREc8//zx27dplNR+aclMoFBgxYgT27NmDDRs2oH///sjMzERcXByOHz8OrVaLBx98EOvXr8fRo0exe/durF271tR6iYuLw7Jly5CXl4d58+YhJSXFKuqqRcNFr9fj+++/h06nw/jx4xs8d0SSJPTo0QNubm64cOGC6ejhe5Gbm4vS0lL4+/tb/OQ3IQRSUlKg1+vRrVu323442Nvbw8fHB5WVlTbRb94crq6u+OCDD9CjRw98+umnePnll1tlF4icamtrcfLkSTg4OGDAgAG3vX/UajWGDx+O6upqHD9+3Co+bJpCkiRMnDgR7733HoQQWLx4sVV9K5ebsZvsiSeewL59+3Ds2DEcPHgQR44cwfHjx7Fz504sXLgQISEhdXaDlyQJ7u7uWLt2Lf785z8jIyMDf/nLX6zii1qLhktpaSnOnj0Ld3d39O/f/7ZvDCcnJ/Tu3Rvl5eVISkq6p9cUQuDSpUu3Hd9oaXq9HqmpqVAqlQgKCrpjeUJCQgCg1Y5JGNfAfPrpp/D29sYbb7yBmJgYm+rGaWmZmZnIyclBcHDwHfegM/YAKBQKHDx40Ca7lSRJwuzZs7FmzRqUlJRg/vz5rX6HB2NXWXBwMAYOHIjw8HB4eXlBpVLd8bNCrVZj9erVGDhwIH744Qd88cUXFq+nFgsX40D+jRs3MGDAgNt2Bxn97ne/gxBClpXqCQkJkCTJLDsAN1VZWRkKCgrg4eEBd3f32z5OkiT4+flBqVQiPT3d4jeKuRjXZmzbtg3Ozs544YUX8Mknn9jkh6G5CSHw66+/QqPRYMiQIXddCBwaGgpvb29cunQJhYWFLVRKeSmVSixduhTz589HSkoKIiMjZenNaI1cXV3x+uuvw97eHq+99hoKCgosWp4WCxe9Xo8jR45AqVTigQceuOOHvLFrzNHREYmJife00ri6uhppaWlwdna2+HiLEAIZGRnQarUIDAy864eDm5sb3NzcUFhYiPLy8hYqZcsz9rFv2rQJSqUSzz77bKvuY28uIQSOHTsGhULR4CyxW7Vr1w6/+93vUFFRgdOnT9tsfarVarz++usYMWIEDh48iLVr17L7tAGSJGHw4MGYOXMmrl69ig8++MCiP/MWC5fc3FykpqbCx8enUYsYXV1dERgYiKKiImRlZTX7dfPy8kzjLdZwBrVx9ldDs8RupVQq0aVLF9TW1trcoGxTSZKEhx9+GOvWrYNer8eiRYsQGxtrsx+I5lBWVoZLly7B09OzzsLJ2zF2jUmShMOHD7dACc3Hzc0NW7ZsgZ+fHzZs2IAdO3bw3miAUqnEc889BxcXF2zevBn5+fkWK0uLhItxRb6xOa9Wq+/6bxQKBfr27QudTof4+Phm3UjG8RadTmcV4y01NTXIycmBo6Njo8916Nq1KwC0+r5mwPAznzt3Lv71r3+huroa8+fPx/79+1v9dTdWUlISysrKEBYW1ujjLHr16gV3d3ecPXvWplu/kiQhJCQEMTExUKlU+Otf/9qqdrCQU7du3fDwww8jOzsb//73vy1WRy0SLlqtFseOHYOdnV2jmvPA/7ZBUSqVOHv2bLP74M+fP2814y35+fmoqKhA586dG3VgkiRJ8PHxgUqlQmZmZpsYh1AqlVi0aBFeffVVlJeX4/HHH5d9twZbJIQwbREyZMiQRv87V1dX07qxS5cumbGE5idJEiZNmoTly5cjPz8fTz31FDdAbYBCoUBUVBQcHBywZcsWi32paJFwSU9PR3Z2Nrp27YrOnTs3+t/5+PjA09MT6enpzdoGpaamBleuXIGTkxP8/Pya/O/lJIQwzfoKDg5u9L9zdXWFq6srioqKWsUuyY2hVCoRFRWFl156CWVlZZg7d26b3yZGp9Pht99+g1qtxv3339/oL0rGrjG9Xo/Dhw/bfB0qFAo899xzmDBhAk6cOMHxl9vo3bs3xowZg5SUFBw4cMAiP3ezh4txEFKn02HYsGFN2uperVaje/fuqKqqQmpqapNf+9q1ayguLoafn5/Fx1uEEEhLS4NSqURAQECjPxyM4y4ajabVj7vcTKVSYdmyZVizZg2Ki4sxZ86cNh0wBQUFSE9Ph4+PT5OOypUkCf3794eDgwN++eWXVrETtaOjI9577z34+fnh/fffx9dff91m74vbUSgU+POf/wyFQoFNmzZZJIDNHi41NTU4efIk2rVrd8dFX7fTt29fCCFw5syZJt1AQghcvnwZOp0OvXr1svixouXl5cjPz4ebmxvat2/f6H9n3OwRwD1NSRZCoKKiAgUFBTazGaBKpcLy5cuxatUqFBUVYc6cOVZzCFZLO3/+PKqqqnD//fc3aszyZp06dUJISAiys7ORnp5uphK2HEmSEBgYiHfffRcKhQLLli1rNcdTyEWSJIwYMQI9evTAiRMncOHChRYvg9k/cVNSUpCfn49u3brV2/33biRJQvfu3WFvb48LFy40OX2N61usYTA/KysLGo0G/v7+TT6ozNfX1zTu0tyJDUlJSfj444+xbds2fPXVVzazVsDOzg7PP/88/v73v6OoqAiPPfYYfvrppzb1QWIcbwGAIUOGNPleViqVGDlyJLRaLY4ePdoq6k6SJEydOhVRUVHIzc3F4sWL20y3cWO1a9cOjz/+OGpqavDxxx+3+M/drOEihMCRI0eg1+sxYsSIZrUePDw84OPjg2vXrjVpWl1NTQ1SUlLg6OgIf3//Jr+unIQQpm69kJCQJn843Mu4ixAC2dnZ2LNnD8rLy+Hq6oq0tDSbGty1s7PD3/72N1ML5o9//GOb6iKrra3FmTNn4OjoiF69ejX530uShOHDh8POzg6HDx9uNTsgKJVKvPjiixg+fDgOHjyI119/vdVcmxwkScLMmTPh7u6Or7/+GsXFxS36+mYNl/Lycpw5cwYuLi5NGoS8mVKpRJ8+faDRaHDx4sVGf6AYx1us4fwWjUaDjIwM035hTaVUKuHr64va2lpcu3atya/9ww8/oKamBqNGjcKcOXMwbtw49O3bt8nlsCRjC2b16tWmgPn+++9tImCMZ3E0V3Z2NvLy8hAYGAhPT89mPYefnx8CAgKQmpqK7OzsZpfF2ri4uGDjxo3w8vLCW2+9xanrt/Dx8cH48eORm5vb4u8Xs4ZLfHw8SktLER4ebjrGt6kkSTKd1HjmzJlG/RshBC5cuACdToc+ffpYfLylsLAQN27cgJeXV6PXJ9zs5nGXpqx3MZ4bk5OTg4CAAPTr1w+Ojo4YMGBAg5uGWjs7OzusWLHCtNfU3LlzLTYTprGqq6vx7bffoqioqFn/3jjeqNFoMHDgwCZ3qRrZ2dlhxIgRqK2txZEjR6y6zprCeLLjm2++CZ1Oh6ioqDaxJqyxJEnCvHnzIEkSPv744xZdzmC2T10hBH766ScAuOt2L3cTGBgIZ2dnJCcnN2q3TyEEzp07B0mSLH44mLFLTK/XN6tLzMjX1xdKpbJJ4y4ajQa//PILlEolRowYAaVSCUmSLD7+dC+MAfPSSy+htLQUc+fOxZ49e6z2w2T37t14/fXXsXnz5mZ12TR1y5fbkSQJY8eOhZ2dHX744YdWNX1XkiTMmjULkZGRSE9Px+LFi1FZWWnpYlkFSZIwdOhQhISE4NixY82addtcZguXvLw8XLp0CV5eXujRo8c9faAZz70vKSlBZmbmXR9vnLrs6upqFetbUlJSGrUL8p24ubnB1dUVhYWFjRp3MYZaYWEhAgIC4Ovra9OhcjPjNOVXXnnFtNDy22+/tcpFpmPHjoWXlxf27NmDc+fONTkEy8vLkZiYCHd3d9Mu2c0VGBiIoKAgpKamIi0t7Z6ey9qoVCq89NJLGDx4MA4cOMDxl5s4OjrikUceQWVlZYvu2We2cDl//jy0Wi1GjBjRqNXodyJJEvr16we9Xt+oN2hGRgZKS0sRFBTUrG4oOZWWliI/Px/u7u4NnhrYWEqlEn5+fqitrUVubu5dH6/X63Hq1CkAwMCBA1tNsBipVCo8++yzeP3111FVVYX58+dj586dVhcwHTp0wMKFC6HVarFhw4Ymb8KanJyMkpIS9O7d+57HDlUqFSZMmIDa2lrs27fPalt7zeXm5oZNmzbBy8sL0dHR+O6771rdNTaHJEl45JFH4ODggB07drTYWS9mC5fhw4fjueeew9ixY+/5g814PLFKpcKZM2fu+AEihMDZs2chhEDfvn0t3iV25coVaDQahISENLu/HPjf3H6gcee75OfnIzs7Gx06dIC/v3+rCxfA8GG5ePFiREdHQ6PRIDIyEp9//rnVBcz48eMRHh6O8+fPN2mWmxAC//3vf6HX6zF8+HBZ3kdjxoyBs7Mzvv/++1a3dYpx2cFbb70FvV6PqKgoJCUlMWBg2G9swIABSEpKwm+//dYir2m2cHFwcEC/fv3u6dv6zTp37gwvLy9kZGTc8WwKnU6Hs2fPws7OzirGWy5evGhar3OvZenSpQvs7OyQkZFxxya/MWB1Oh3uu+8+mxy8byylUonIyEisW7cOQgg8/fTT2Lp1q1V1iajVaixatAgqlQrbtm1r9F5PGo0Gx48fh729fbMWIDfE29sbw4cPx/Xr13HgwIF7fj5rY/yWHhUVhezsbCxatKhZW0e1NkqlEnPnzoVOp8Nnn33WIoFr1mlUcg4e29nZITw8HDU1NUhMTLxt5eTn5yMrKwve3t7w8vKS5bWbq6SkBLm5uWjfvr0sZXF2doanpyeKi4tRUlJy28dVVlbi8uXLcHBwQM+ePVtlq+VmSqUS8+bNw8aNG03nwWzYsMFqBq2NMx6HDx+OjIwM7N69u1Fv7szMTGRkZCAwMLBJe/LdrSyPPfYY7O3tsX379jveR7ZKqVRi1apVGDNmDH7++WesWrXKau4FSzFu+tmhQwfs3bu3RQ6Ps+wc3SaQJMk0dmDcHfZWxllitbW16Nu3r8W/sV+6dAkajQY9evSQpSwKhQJBQUHQ6XRIS0u7bR1cvnwZFRUVCA0Ntfgan5aiUCjw6KOP4sMPP0S7du2wYsUKvPXWW1az1Y1SqcSTTz4JBwcHbN++/a6nBAoh8PPPP0Oj0eCBBx64py7Vm0mShNDQUIwbNw55eXmIi4uT5XmtjbOzM95//30EBARg06ZN+OSTT9p891inTp0wfvx4XL9+vUV2GreZcAEMB2x5eHjg8uXLDfYX6/V6nDhxAgqFAoMGDbLoN3aNRoOEhASoVCrZtvs3nmkhSdJt91Iydgsaz8Np7a2WmykUCjz88MP4+OOP4eLiglWrVuHVV1+1is0aJUlCUFAQJk+ejPz8fGzfvv2Ob26tVouDBw/Czs4OI0eOlPXnaOxKfPrppzFx4kTZnteaGOt748aNUKvVWLFihSxHptu6uXPnQpKkFjlK3KbCxcHBAffffz8qKioanDWWn5+PlJQUeHl5mQ7ZspQrV66gqKgI/v7+Td5T7U46deoEV1dX5OTk1Ou7F0IgKysL169fR+fOnZu0e25rIUkSpkyZgn//+9/w9PTEK6+8gtWrV7fYDJk7MR6G1r59e3z77be3bX0CQFpaGlJTUxEcHGyWe9nb2xtz585t9uJmWyBJEsaPH481a9agtLQUTz75JHJzc9tswEiShCFDhiA4OBjHjx/HlStXzPp6NhUuxp0+FQoFDh06VCd5jYvNampqMHjw4CbvHCs3BwcHBAQEyN6CsrOzQ0hICGpra5GSklLnjSKEwK+//gq9Xo/+/ftbfGcCSzEuGPzyyy/h4+OD6OhoPPfcc1axsM7b2xuPPvooKioqsHHjxgbHAoQQ2LNnDzQaDSZMmGCW7l1bX0zbWMaDsx599FEkJiZiyZIlqKqqsnSxLMbR0REzZ85ERUUFdu7cadagtblPn5CQEPj4+CApKQkZGRmmP6+ursbhw4ehVqsxYsQIi79x/P39MWvWLHTt2lXWshinWyoUCiQkJJgCVgiBa9euIS0tDe3bt0doaKjF68CSJEnCsGHDsGvXLgQGBmLjxo1YsmQJysrKLPrN1biZYHBwMI4ePdrg1OSioiLExcXB1dUV48aNa9M/Rzmo1WpER0djwIAB+M9//oN//vOfVjWbsCVJkoTZs2fDwcEBX3zxhVmD1ubCRa1WY8yYMdBoNNi3bx/0ej2EEDh58iRyc3PRu3fvZm0OaQ4qlcosrQdvb2906tQJubm5yMnJgRACer0eR48ehVarxcCBAy3ecrMGxoOyvvrqK/To0QMff/wxIiMjUVJSYtGAcXJyQlRUFJRKJdatW4eMjAxTeYQQ+Oabb1BYWIjRo0ejY8eOFitnayFJEjp06IAPPvgAnTp1wptvvomvvvqqzXaPdevWDYMHD0ZycjKOHz9uttexuXCRJAkjR46Ep6cnjh07hsuXL6O4uBi7du2CUqnEjBkzWn13kFKpxIABA+oEysWLF5GamoqOHTuiT58+/Lb7/4wLcL/55hv07dsXO3fuxJ/+9KcmHd9gjjINGjQIs2bNQkFBAdauXWv6kpCQkIAvvvgCrq6u+OMf/9jq7+WWYtxn8L333oMkSXjmmWcavRFua6NUKvHEE09Ar9fjww8/NFvI2uSd6+rqit///vfQaDSIiYnBm2++iby8PAwfPlyWxYrWTpIk9OjRAz4+Prh69Sq++eYbHDhwAEqlEmPGjIG9vb2li2hVjLPsvvrqKwwdOhR79uzBo48+ipycHIuVSalUYsGCBRg5ciQuXLiAqKgovPbaa1i5ciXKy8sxb948007YJA9JkjB9+nT87W9/Q0FBAebPn9+mjg43kiQJEyZMgK+vL77//vtG7dfYHDYZLpIkYdSoUXjwwQdRVFSEK1euICwsDHPmzJFtPYC1s7Ozw8SJE+Hu7m7a6XT06NH3tDlmayZJEvz9/fHll19i3LhxOHz4MHbu3GnRMjk6OmLVqlWYPn06ioqKsHv3blRWVuJPf/oTZs2axZ+jGSiVSixfvhwzZ85EYmIivvjiC0sXySLc3d0xa9Ys3LhxA/v27TPLa5hllaFer0dpaWmTN+lrqmnTpqFXr16orq5G9+7dodfrG33aWnV1tdnmeRvPqzf3Aj5nZ2fMmDHDtAtAhw4dGn1SZW1trVn7nPV6Pa5du2aVR89GR0fjk08+wbRp07Bjxw6zvY4QAkVFRXedBr1gwQKMGjUKOTk58PX1RVBQUIttWVJZWWm2+8Ca74GVK1ciMDAQ06ZNw5dffmm217HmOpg2bRo8PDwwcuRIxMbGyv78kpD5zjKe952Xl2fV37yEEPD29r6nMzJu97yXLl1CcXGx1V9/+/bt7/k4hNs9965du5Cammq1dWC87YODgzFz5kyz1MGPP/6I7Oxsq60DwFBOX19fWTaYvfV5rf0eAAzlNOc98NVXX+HKlStWXwdBQUH4/e9/L+/MVrnDBYBNzcIwxw+9rV8/wDoAWAdt/fqBtl0HZgkXuel0OlRVVcHBwaHNjKncSqfTobKyEo6Ojm2yDm6+Ta35W6A56fV61NTUwN7evs3OImvr94EQAkIIm1gEaxN3aHp6OubNm4f09HRLF8Vi8vPzsW7dOotOobWkM2fOQKFQtNnpowCQlJSEkSNHIikpydJFsZi2fh+cPXsW9vb2OHv2rKWLclc2ES5ERGRbGC5ERCQ7hgsREcmO4UJERLJjuBARkewYLkREJDuGCxERyY7hQkREsmO4EBGR7BguREQkO4YLERHJjuFCRESyY7gQEZHsGC5ERCQ7hgsREcmO4UJERLJjuBARkewYLkREJDuGCxERyY7hQkREsmO4EBGR7BguREQkP2HFTp06JebPny/c3NyEJEnCzc1NzJ8/X5w6dcrSRWsxxjpwd3cXCoVCuLu7t6k6MF6/q6urACBcXV3b1PULwfeBELwPbPH6rTJcNBqNiIyMFACESqUSAEy/jL+PjIwUGo3G0kU1m7ZeB239+oVgHQjBOrDl67fKcImMjBSSJNWpyFt/SZIkIiMjLV1Us2nrddDWr18I1oEQrANbvn6rC5dTp07dsSJv/WXNzcLmaut10NavXwjWgRCsA1u/fqsb0I+JiYFKpWrUY1UqFTZs2GDmErW8tl4Hbf36AdYBwDqw9euXhBDC0oW4maenJ4qKihr9eA8PDxQWFpqxRC2vrddBW79+gHUAsA5s/fqtLlzUajU0Gk2jH29nZ4fa2lozlqjltfU6aOvXD7AOANaBrV+/1XWLubi4mPXxtqCt10Fbv36AdQCwDmz9+q0uXGbMmNGkfsaHHnrIzCVqeW29Dtr69QOsA4B1YPPXb9n5BPXZ+gwJObT1Omjr1y8E60AI1oGtX7/VhYsQtj23Wy5tvQ7a+vULwToQgnVgy9dvleFiy6tS5dLW66CtX78QrAMhWAe2fP1WGS5Gp06dEgsWLBAeHh7Czs5OeHh4iAULFlhd88+c2nodtPXrF4J1IATrwBav3+qmIhMRke2zutliRERk+xguREQkO4YLERHJjuFCRESyY7gQEZHsGC5ERCQ7hgsREcmO4UJERLJjuBARkewYLkREJDuGCxERyY7hQkREsmO4EBGR7BguREQkO4YLERHJjuFCRESy+z+76CfMKEjXLgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 500x400 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model(dataset['train_input'])\n",
    "model.plot(beta=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "aa26622b",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "| train_loss: 1.80e-01 | test_loss: 1.78e-01 | reg: 3.77e+01 | : 100%|█| 50/50 [00:13<00:00,  3.76it"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "saving model version 0.2\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "model.fit(dataset, opt=\"LBFGS\", steps=50, lamb=0.002, lamb_entropy=10.0, lamb_coef=1.0);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "9d162e40",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 500x400 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.plot(in_vars=[r'$x_{}$'.format(i) for i in range(1,7)])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b239996d",
   "metadata": {},
   "source": [
    "This gives the dependence among $(x_4,x_5)$. Another random seed can give dependence among $(x_1,x_2,x_3)$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6b5975f8",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.16"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
